package cn.xiaobai.listener;

import cn.xiaobai.monitor.MonitorServer;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.File;

/**
 * 文件变更监听器
 *
 * @Author yangdaji
 * @Date 2022/11/7 0007
 * @PackageName xiaobai.listener
 * @ClassName FileChangeListener
 */
@Slf4j
@Component
public class FileChangeListener extends FileAlterationListenerAdaptor {

    @Autowired
    private MonitorServer monitorServer;

    @Override
    public void onStart(FileAlterationObserver observer) {
        // 单纯提示
        //log.info("监听器监听中....");
    }

    @Override
    public void onStop(FileAlterationObserver observer) {
        // 单纯提示
        //log.info("监听器暂时停止!");
    }

    @Override
    public void onDirectoryCreate(File directory) {
        // 目录创建, 扫描该目录下是否符合条件的文件,后面在触发创建文件时会进行判断
        log.info("检测到新建了一个目录, 即将扫描该目录下的文件....");
    }


    @Override
    public void onDirectoryDelete(File directory) {
        // 目录删除, 清除所有推送
        log.info("未检测到监控目录, 即将停止所有推送....");
        monitorServer.stop();
    }

    @Override
    public void onFileChange(File file) {
        // 文件修改后进行刷新缓存
        log.info("检测到文件修改,即将重新推送该数据....");
        monitorServer.refreshPushData(file);
    }


    @Override
    public void onFileCreate(File file) {
        // 文件创建,触发推送操作, 如果没有数据,也不会进行推送
        log.info("检测到创建了一个文件, 数据即将推送(注: 不存在数据则不推送)....");
        monitorServer.loadPushData(file);
    }

    @Override
    public void onFileDelete(File file) {
        // 文件删除, 该数据停止推送
        log.info("检测到推送数据删除,即将停止该数据推送......");
        monitorServer.stopChannelPush(file);
    }
}
